% BOF提取图像特征，实现图像检索

%%
clear;clc;
% 获取sift有点慢并且每次执行结果一致，所以直接保存起来了（在getSift.m里面）
load 'siftFeatures.mat'
% 聚类
k=1000;
[idx,C]=featureCluster(siftFeatures,k);

%%
% 求得单幅图像的直方图向量
% 一行为一张图，一列为一个聚类中心对应的关键点描述子
pictureNum=1000;
histMatric=zeros(pictureNum,k);
% 求所有图的直方图向量组成的矩阵
histMatric(1,:)=getHistVector(1,siftIndexs(1),C,k,siftFeatures);
for i=2:pictureNum
%     disp(i);
    siftIndexs(i)=siftIndexs(i-1)+siftIndexs(i);
    histMatric(i,:)=getHistVector(siftIndexs(i-1)+1,siftIndexs(i),C,k,siftFeatures);
end

%%
% 实现图像检索
imgIndex=input('请输入检索相似图的图片index\n');
[indexs]=pictureSearch(histMatric,imgIndex);
% 画图
figure(1);
imgname=['E:\XDU-6\多媒体数据处理\third\corel\corel\',num2str(floor(imgIndex/100)),'\',num2str(imgIndex),'.jpg'];
imshow(imgname);title(['原始图像',num2str(imgIndex)]);
figure(2);
for i=1:10
    subplot(2,5,i);
    imgname=['E:\XDU-6\多媒体数据处理\third\corel\corel\',num2str(floor(indexs(i)/100)),'\',num2str(indexs(i)),'.jpg'];
    imshow(imgname);title(['图片的index：',num2str(indexs(i))]);
end

%%
% % 统计准确率
% acc=zeros(10,1);
% trueNum=zeros(10,1);
% for i=0:pictureNum-1
%     [indexs]=pictureSearch(histMatric,i);
%     pakageIndex=floor(i/100);
%     for j=1:10
%         if floor(indexs(j)/100)==pakageIndex
%             trueNum(pakageIndex+1)=trueNum(pakageIndex+1)+1;
%         end
%     end
% end
% acc=trueNum/1000;
